package fr.adfm.entity;

import java.util.Collection;
import java.util.Date;
import java.util.LinkedHashSet;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;

@Entity
public class Colis {
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	private Long id;
	
	public Long getId() {
		return id;
	}
	
	private String refColis;
	private Double fraisDePort;
	private Date datePreparation;
	private Date dateLivraison;
	private String commentaireFournisseur;
	private String codeSuiviExpedition;
	
	@Enumerated(EnumType.STRING)
    private StatutExpedition statutExpedition;
	
	@ManyToOne
	@JoinColumn(name = "Commande_Id")
	private Commande commande;
	
	@ManyToOne
	@JoinColumn(name = "ModeDeLivraison_Id")
	private ModeDeLivraison modeDeLivraison;
	
	@OneToMany
	@JoinColumn(name="Colis_ID")
	private Collection<LigneCommande> ligneCommandes = new LinkedHashSet<LigneCommande>();

	@OneToOne(cascade=CascadeType.ALL)
	@JoinColumn(name = "Adresse_livraison_Id")
	private Adresse adresseDeLivraison;

	public String getRefColis() {
		return refColis;
	}

	public void setRefColis(String refColis) {
		this.refColis = refColis;
	}

	public Double getFraisDePort() {
		return fraisDePort;
	}

	public void setFraisDePort(Double fraisDePort) {
		this.fraisDePort = fraisDePort;
	}

	public Date getDatePreparation() {
		return datePreparation;
	}

	public void setDatePreparation(Date datePreparation) {
		this.datePreparation = datePreparation;
	}

	public Date getDateLivraison() {
		return dateLivraison;
	}

	public void setDateLivraison(Date dateLivraison) {
		this.dateLivraison = dateLivraison;
	}

	public String getCommentaireFournisseur() {
		return commentaireFournisseur;
	}

	public void setCommentaireFournisseur(String commentaireFournisseur) {
		this.commentaireFournisseur = commentaireFournisseur;
	}

	public String getCodeSuiviExpedition() {
		return codeSuiviExpedition;
	}

	public void setCodeSuiviExpedition(String codeSuiviExpedition) {
		this.codeSuiviExpedition = codeSuiviExpedition;
	}

	public StatutExpedition getStatutExpedition() {
		return statutExpedition;
	}

	public void setStatutExpedition(StatutExpedition statutExpedition) {
		this.statutExpedition = statutExpedition;
	}

	public ModeDeLivraison getModeDeLivraison() {
		return modeDeLivraison;
	}

	public void setModeDeLivraison(ModeDeLivraison modeDeLivraison) {
		this.modeDeLivraison = modeDeLivraison;
	}

	public Collection<LigneCommande> getLigneCommandes() {
		return ligneCommandes;
	}

	public void setLigneCommandes(Collection<LigneCommande> ligneCommandes) {
		this.ligneCommandes = ligneCommandes;
	}

	public Adresse getAdresseDeLivraison() {
		return adresseDeLivraison;
	}

	public void setAdresseDeLivraison(Adresse adresseDeLivraison) {
		this.adresseDeLivraison = adresseDeLivraison;
	}

	public Commande getCommande() {
		return commande;
	}

	public void setCommande(Commande commande) {
		this.commande = commande;
	}
	
	
}
